package com.cn.laoluobase.config.interceptor;


import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/*
 *  这是登陆拦截器，用于拦截所有请求，除特定接口外，都需要登陆，否则不允许访问。
 *  登陆的标志：请求头携带token,且token在有效期内。
 * */


public class AuthInterceptor implements HandlerInterceptor {

    private boolean reqAllow = false;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // Controller方法处理之前
        // setHeader 只能在preHandle中处理，在其他地方处理无效

        String token = request.getHeader("token");  //获得请求头内容，约定token作为交互内容
        System.out.println("token-***" + token);

        // 对token进行校验。如果符合要求则放行。实际业务中需要换成JWT之类的token验证。
        // 这里示例，进行简化，写死。
        if ("aaa".equals(token)) {
            reqAllow = true;
        }

        // 如果 ALLOW 为真，放行。否则拒绝返回401。
        if (reqAllow) {
            return true;
        } else {
            response.setStatus(401);  //通过response设置返回信息，比如status设置状态
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write("401");
            return false;  //true 放行，false拒绝
        }

    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
      // Controller方法处理完之后.
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
      //  DispatcherServlet进行视图的渲染之后

    }

}
